package tp.pr1;

/**
 * Una calle conecta dos lugares A y B. Todas las calles se pueden recorrer en
 * los dos sentidos. Si una calle esta definida como Street(A,NORTH,B), esto
 * significa que el lugar B esta al norte de A, y A esta al sur de B
 */
public class Street {
	private Place source;
	private Direction direction;
	private Place target;

	/**
	 * Constructor de una calle
	 * 
	 * @param source
	 *            - lugar de origen (A en el ejemplo) direction - representa
	 *            como esta el lugar de destino respecto del lugar origen target
	 *            - lugar de destino (B)
	 * 
	 */
	public Street(Place source, Direction direction, Place target) {
		this.source = source;
		this.direction = direction;
		this.target = target;
	}

	/**
	 * Comprueba si la calle viene desde un lugar en una direccion dada
	 * (recuerda que las calles tienen dos sentidos)
	 * 
	 * @return true si la calle viene desde el input place
	 */
	public boolean comeOutFrom(Place place, Direction whichDirection) {
		boolean ret = false;
		if (source.toString().equals(place.toString())
				&& direction.equals(whichDirection))
			ret = true;
		else if (target.toString().equals(place.toString())
				&& direction.equals(whichDirection.opposite()))
			ret = true;
		return ret;
	}

	/**
	 * Devuelve el lugar al otro lado de la calle desde el lugar en el que estoy
	 */
	public Place nextPlace(Place place) {
		Place ret = null;
		if (place == source)
			ret = target;
		else if (place == target)
			ret = source;
		return ret;
	}
}
